package middleware

import (
	"go-frame/src/server-admin/service"

	"github.com/gin-gonic/gin"
)

// AuthMiddleware 是一个 Gin 中间件，用于验证 JWT token 并将用户信息存储到上下文中。
func AuthMiddleware(authService *service.AuthService) gin.HandlerFunc {
	return func(c *gin.Context) {
		tokenString := c.GetHeader("Authorization")
		if tokenString == "" || len(tokenString) < 7 || tokenString[:7] != "Bearer " {
			c.JSON(401, gin.H{"error": "未授权：缺少或无效的 Authorization 头部"})
			c.Abort()
			return
		}

		tokenString = tokenString[7:] // 移除 "Bearer " 前缀

		claims, err := authService.ParseToken(tokenString)
		if err != nil {
			c.JSON(401, gin.H{"error": "未授权：无效的 token"})
			c.Abort()
			return
		}

		// 将解析出的 claims 存储到 Gin 上下文中，以便后续处理函数使用
		c.Set("user_claims", claims)

		c.Next()
	}
}
